/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BancoDados;

/**
 *
 * @author Diogo
 */
//import javax.swing.JOptionPane;
import java.sql.*;

public class ConexaoWeb {

    /** Creates a new instance of Conexao */
    public ConexaoWeb() {
    }
    //private String url = "jdbc:postgresql://localhost:5432/SAFIR";
    //private String url = "root@localhost:3306";
//    private String url = "jdbc:mysql://localhost:3306/locadora";
//    private String usuarioBD = "root";
//    private String senhaBD = "closed";
//    public static Connection bd = null;
    private Connection conexao;
    private final boolean _MYSQL = false;
    private final String dataBase = "projeto";
    private String url = (_MYSQL ? "jdbc:mysql://localhost:3306/" + dataBase
            : "jdbc:postgresql://localhost:5432/" + dataBase);
    private String usuarioBD = (_MYSQL ? "root" : "postgres");
    private String senhaBD = "closed";
    //private ResultSet rs = null;
    private boolean conectado = false;

    public void conectar() {
        if (!conectado) {
            try {
                System.out.println("tentando conectar");
                if (_MYSQL) {
                    Class.forName("com.mysql.jdbc.Driver"); // especifica driver de conexao

                } else {
                    Class.forName("org.postgresql.Driver"); // especifica driver de conexao
                }
                conexao = DriverManager.getConnection(url, usuarioBD, senhaBD); // conectar com o bd
                System.out.println("Banco Conectado !!!");
                conectado = true;
            } catch (ClassNotFoundException cnfex) {
                System.err.println("Nao foi encontrado o driver especificado JDBC/ODBC");
                cnfex.printStackTrace();
            } catch (SQLException e) {
                System.out.println("Nao foi possivel conectar");
                e.printStackTrace();
            }
        } else {
            System.out.println("banco ja conectado..");
        }
    }

    public boolean setSearch(String schema) {
        try {
            Statement state;
            state = conexao.createStatement();
            state.executeUpdate("set search_path to " + schema);
            conexao.commit();
            return true;
        } catch (SQLException e) {
            System.out.println("Erro ao Definir o Schema");
            e.printStackTrace();
        }
        return false;
    }

    public int cadastrar(String SQL) {
        conectar();
        System.out.println("SQL = " + SQL);
        try {
            Statement state;
            state = conexao.createStatement();
            int rows = state.executeUpdate(SQL);
            //conexao.commit();
            desconectar();
            return rows;
        } catch (SQLException e) {
            System.out.println("Erro ao Executar consulta");
            System.out.println("SQL = " + SQL);
            e.printStackTrace();
            desconectar();
        }
        desconectar();
        return -1;
    }

	/**
	 *
	 * @param SQL
	 * @param maxResults menor ou igual a 0 nao se aplica
	 * @param rolavel 
	 * @return
	 * @throws SQLException
	 */
    public ResultSet consultar(String SQL, int maxResults, boolean rolavel) throws SQLException {
        conectar();
        System.out.println("SQL: " + SQL);
        Statement state;
        if (rolavel) {
            state = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        } else {
            state = conexao.createStatement();
        }
		if (maxResults > 0){
			state.setMaxRows(maxResults);
		}
		ResultSet rs = state.executeQuery(SQL);
        //rs = state.executeQuery(SQL);
        desconectar();
        return rs;

    }
    public ResultSet consultar(String SQL, int maxResults) throws SQLException {
        return consultar(SQL, maxResults, false);
    }

    public ResultSet consultar(String SQL) throws SQLException {
        return consultar(SQL, 0);
    }


    public ResultSet consultaRolavel(String SQL) throws SQLException {
        return consultar(SQL, 0, true);
    }

    //conectar
    public ResultSet buscaPorNome(String nome, String tabela, String campo) {
        String SQL = "select * from " + tabela + " where " + campo + " LIKE '" + nome + "%'";
        ResultSet rs;
        Statement state;
        try {
            state = conexao.createStatement();
            rs = state.executeQuery(SQL);
            return rs;
        } catch (SQLException e) {
            System.out.println("Erro Ao Executar a Consulta");
            e.printStackTrace();
        }
        return null;
    }
    //desconectar

    /**
     * 
     * @param sql a sql a ser executada
     * @return -1 caso dê erro de instrucao ou o numero de linhas afetadas.
     */
    public int atualizar(String sql) {
        conectar();
        System.out.println("SQL: " + sql);
        try {
            Statement state;
            state = conexao.createStatement();
            return state.executeUpdate(sql);

        } catch (SQLException e) {
            System.out.println("Erro ao Executar o Update");
			System.err.println(e.getMessage());
            //JOptionPane.showMessageDialog(null, "Erro ao executar comando SQL excluir" + e.getMessage());
            e.printStackTrace();
            desconectar();
            return -1;
        }
    }

    public boolean executar(String SQL) {
        conectar();
        try {
            Statement state;
            state = conexao.createStatement();
            state.execute(SQL);
            //conexao.commit();
            desconectar();
            return true;
        } catch (SQLException e) {
            System.out.println("Erro ao Executar comando: \n\t" + SQL);
            e.printStackTrace();
            desconectar();
            return false;
        }
    }

    public String login(String login, String senha) {
        String resultado = "0";
        if (login.equals("administrador") && senha.equals("kxdw48rrxk")) {
            return "admin";
        } else {
            //   conectar();
            try {
                ResultSet rs;
                Statement state;
                state = conexao.createStatement();
                rs = state.executeQuery("Select * from instrutor where login = '" + login + "' and senha = '" + senha + "'");
                while (rs.next() == true) {
                    resultado = "" + rs.getInt("pkcodinstrutor");
                }
            } catch (Throwable t) {
                t.printStackTrace();
            }
            //   desconectar();
            return resultado;
        }//fim else
    }//fim login
    /*Sera utilizado na pagina de login.. passando 2 parametros, login e senha... retornando o tipo de usuario
     *para que possa ser direcionado para a pagina correta... se retornar 0 eh pq nao foi encontrado usuario
     *deve retornar mensagem de usuario nao encontrado
    os parametros serao pegos atraves de:
     *request.getParameter da pagina anterior*/

    public int excluir(String SQL) {
        conectar();
        try {
            Statement stmt = conexao.createStatement();
            int rows = stmt.executeUpdate(SQL);
            //JOptionPane.showMessageDialog(null,"Dados exclu�dos");
            //conexao.commit();
            desconectar();
            return rows;
        } catch (SQLException e) {
            //JOptionPane.showMessageDialog(null, "Erro ao executar comando SQL excluir" + e.getMessage());

            System.out.println("Erro ao Executar o Delete: ");
			System.err.println(e.getMessage());
            desconectar();
        }
        desconectar();
        return -1;
    }//fim excluir

    public void desconectar() {
        try {
            conexao.close();
            System.out.println("Banco Desconectado !!");
            conectado = false;
        } catch (SQLException e) {
            System.err.println("Erro ao Desconectar do Banco");
            e.printStackTrace();
        }
    }
}//fim class

